package com.hyt.it.ogt.pj.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.data.enums.SubjectMarkTypeEnums;
import com.hyt.it.ogt.pj.model.dto.pj.PjProjectCandidatePushDTO;
import com.hyt.it.ogt.pj.model.entity.Project;
import com.hyt.it.ogt.pj.model.param.ExamExpertSettingParam;
import com.hyt.it.ogt.pj.model.vo.*;

import java.util.List;

/**
 * <p>
 * 评卷项目表 服务类
 * </p>
 *
 * @author qiaozj
 * @since 2020-07-09
 */
public interface IProjectDfyhService extends IService<Project> {


    /**
     * 获取项目概览
     * @param projectId
     * @return
     */
    ProjectOverviewVo getOverViewData(String projectId);
    
    /**
     * 获取项目概览
     * @param projectId 项目id
     * @return
     */
    ProjectNewVo getProjectNewVoById(String projectId, String officeId);
    
    /**
     * 获取项目概览
     * @param projectId 项目id
     * @return
     */
    List<ProjectNewVo> getProjectNewVoByIds(String projectIds, String officeId);
    
    /**
     * 获取项目概览
     * @param projectId 项目id
     * @param ptBindingStatus 平台绑定状态
     * @return
     */
    Boolean updateProjectPtBindingStatus(String projectId, Integer ptBindingStatus);


    /**
     * 评卷项目分页查询（新）
     *
     * @param pageParam
     * @param projectName
     * @param markStatus
     * @param officeId
     * @param classfication
     * @param ptBindingStatus 平台绑定状态
     * @param projectDataType
     * @return
     */
    Page<ProjectNewVo> page(Page<ProjectNewVo> pageParam, String projectName, Integer markStatus, String officeId, Integer classfication, Integer ptBindingStatus, Integer projectDataType);


    /**
     * 按评卷模式查询评卷进度
     * @param pageParam
     * @param projectId
     * @param subjectId
     * @return
     */
    Page<MarkProgress1Vo> markProgressPage(Page<MarkProgress1Vo> pageParam, String projectId, String subjectId, String placeId, String roomId);


    /**
     * 按评卷模式查询评卷进度
     * @param pageParam
     * @param projectId
     * @param subjectId
     * @param expertName
     * @return
     */
    Page<MarkProgress2Vo> markProgress2Page(Page<MarkProgress2Vo> pageParam, String projectId, String subjectId, String expertName);

    /**
     * 根据项目查询批次
     * @author: longt
     * @Param: [projectId]
     * @return: java.util.List<com.hyt.it.ogt.pj.model.vo.OptionItemVo>
     * @date: 2022/3/7 下午7:12
     */
    List<OptionItemVo> getBatchByProject(String projectId);

    /**
     * 根据项目查询科目
     * @author: longt
     * @Param: [projectId]
     * @return: java.util.List<com.hyt.it.ogt.pj.model.vo.OptionItemVo>
     * @date: 2022/3/7 下午7:12
     */
    List<OptionItemVo> getSubjectByProject(String projectId, SubjectMarkTypeEnums subjectMarkTypeEnums);

    /**
     * 根据项目查询考点
     * @author: longt
     * @Param: [projectId]
     * @return: java.util.List<com.hyt.it.ogt.pj.model.vo.OptionItemVo>
     * @date: 2022/3/7 下午7:12
     */
    List<OptionItemVo> getPlaceByProject(String projectId);

    /**
     * 根据项目查询考场
     * @author: longt
     * @Param: [projectId]
     * @return: java.util.List<com.hyt.it.ogt.pj.model.vo.OptionItemVo>
     * @date: 2022/3/7 下午7:12
     */
    List<OptionItemVo> getRoomByProject(String projectId, String placeId);

    /**
     * 查询是否允许推送
     * @param examId
     */
    void projectPushCheck(String examId);

    /**
     * 推送现考现评数据
     * @param pjProjectCandidatePushDTO
     */
    void projectDataPush(PjProjectCandidatePushDTO pjProjectCandidatePushDTO);

    /**
     * 查询是否能够修改考试类型并清除数据
     * @param examId
     */
    void examTypeChangeCheck(String examId);

    /**
     * 查询专家下的科目
     * @param param
     * @param officeId
     * @return
     */
    List<OptionItemVo> getExpertSubject(ExamExpertSettingParam param, String officeId);

    /**
     * 查询专家下的考点
     * @param projectId
     * @param officeId
     * @return
     */
    List<OptionItemVo> getExpertPlace(String projectId, String officeId);

    /**
     * 查询考点下的考场
     * @param projectId
     * @param palceId
     * @return
     */
    List<OptionItemVo> getExpertRoom(String projectId, String palceId);
}
